類別 yii\grid\GridView
GridView 小部件用於在網格中顯示資料。
基本用法如下
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
'id',
'name',
'created_at:datetime',
// ...
],
]) ?>
網格表格的欄位是根據 yii\grid\Column 類別配置的,這些類別透過 $columns 進行配置。
網格視圖的外觀和風格可以使用大量的屬性進行自訂。
有關 GridView 的更多詳細資訊和使用資訊,請參閱關於資料小部件的指南文章。
公共屬性
公共方法
保護方法
方法 | 描述 | 定義於 |
---|---|---|
createDataColumn() | 根據 "attribute:format:label" 格式的字串建立 yii\grid\DataColumn 物件。 | yii\grid\GridView |
getClientOptions() | 傳回網格視圖 JS 小工具的選項。 | yii\grid\GridView |
guessColumns() | 如果未明確指定 $columns,此函數會嘗試從給定的資料猜測要顯示的欄位。 | yii\grid\GridView |
initColumns() | 建立欄位物件並初始化它們。 | yii\grid\GridView |
事件
事件 | 類型 | 描述 | 定義於 |
---|---|---|---|
EVENT_AFTER_RUN | yii\base\WidgetEvent | 在執行小工具後立即觸發的事件。(自 2.0.11 版本起可用) | yii\base\Widget |
EVENT_BEFORE_RUN | yii\base\WidgetEvent | 在執行小工具前立即觸發的事件。(自 2.0.11 版本起可用) | yii\base\Widget |
EVENT_INIT | yii\base\Event | 透過 init() 初始化小工具時觸發的事件。(自 2.0.11 版本起可用) | yii\base\Widget |
常數
常數 | 值 | 描述 | 定義於 |
---|---|---|---|
FILTER_POS_BODY | 'body' | yii\grid\GridView | |
FILTER_POS_FOOTER | 'footer' | yii\grid\GridView | |
FILTER_POS_HEADER | 'header' | yii\grid\GridView |
屬性詳細資料
在每次呈現資料模型後呼叫一次的匿名函數。它應具有與 $rowOptions 類似的簽名。函數的傳回結果將直接呈現。
在每次呈現資料模型前呼叫一次的匿名函數。它應具有與 $rowOptions 類似的簽名。函數的傳回結果將直接呈現。
網格欄位配置。每個陣列元素代表一個特定網格欄位的配置。例如,
[
['class' => SerialColumn::class],
[
'class' => DataColumn::class, // this line is optional
'attribute' => 'name',
'format' => 'text',
'label' => 'Name',
],
['class' => CheckboxColumn::class],
]
如果欄位是 yii\grid\DataColumn 類別,則可以省略 "class" 元素。
作為快捷方式格式,可以使用字串來指定僅包含 attribute、format 和/或 label 選項的資料欄位配置:"attribute:format:label"
。例如,上述 "name" 欄位也可以指定為:"name:text:Name"
。"format" 和 "label" 都是可選的。如果不存在,它們將採用預設值。
使用快捷方式格式,簡單情況下的欄位配置如下所示
[
'id',
'amount:currency:Total Amount',
'created_at:datetime',
]
當使用帶有活動記錄的 $dataProvider 時,您還可以顯示來自相關記錄的值,例如 author
關係的 name
屬性
// shortcut syntax
'author.name',
// full syntax
[
'attribute' => 'author.name',
// ...
]
如果配置資料欄位時未明確指定類別名稱,則預設的資料欄位類別。預設為 'yii\grid\DataColumn'。
當儲存格內容為空時的 HTML 顯示。此屬性用於呈現沒有定義內容的儲存格,例如空的頁尾或篩選器儲存格。
請注意,如果資料項目為 null
,則 yii\grid\DataColumn 不會使用此屬性。在這種情況下,將使用 nullDisplay 屬性 $formatter 來指示空資料值。
用於呈現每個篩選器錯誤訊息的選項。這主要由 yii\helpers\Html::error() 在呈現每個篩選器輸入欄位旁邊的錯誤訊息時使用。
用於呈現篩選器錯誤摘要的選項。請參閱 yii\helpers\Html::errorSummary(),以取得有關如何指定選項的更多詳細資訊。
另請參閱 renderErrors()。
保留使用者輸入的篩選器資料的模型。設定此屬性後,網格視圖將啟用基於欄位的篩選。預設情況下,每個資料欄位都會在頂部顯示一個文字欄位,使用者可以填寫以篩選資料。
請注意,為了顯示用於篩選的輸入欄位,欄位必須設定其 yii\grid\DataColumn::$attribute 屬性,並且該屬性應在 $filterModel 的當前情境中處於活動狀態,或將 yii\grid\DataColumn::$filter 設定為輸入欄位的 HTML 程式碼。
如果未設定此屬性 (null),則篩選功能將被停用。
無論是否在失去焦點時套用篩選器。保留透過 yiiGridView JS 管理篩選器的能力
篩選器是否應顯示在網格視圖中。有效值包括
- FILTER_POS_HEADER:篩選器將顯示在每個欄位標頭儲存格的頂部。
- FILTER_POS_BODY:篩選器將顯示在每個欄位標頭儲存格的正下方。
- FILTER_POS_FOOTER:篩選器將顯示在每個欄位頁尾儲存格的下方。
篩選器列元素的 HTML 屬性。
另請參閱 yii\helpers\Html::renderTagAttributes(),以了解如何呈現屬性的詳細資訊。
用於傳回篩選結果的 URL。yii\helpers\Url::to() 將被呼叫以正規化 URL。如果未設定,將使用當前控制器動作。當使用者變更任何篩選器輸入時,當前篩選器輸入將作為 GET 參數附加到此 URL。
用於將模型屬性值格式化為可顯示文字的格式化器。這可以是 yii\i18n\Formatter 的實例,或是用於建立 yii\i18n\Formatter 實例的配置陣列。如果未設定此屬性,將使用 "formatter" 應用程式元件。
表格標題列的 HTML 屬性。
另請參閱 yii\helpers\Html::renderTagAttributes(),以了解如何呈現屬性的詳細資訊。
決定網格視圖的不同區段應如何組織的版面配置。以下符記將被替換為相應的區段內容
{summary}
:摘要區段。請參閱 renderSummary()。{errors}
:篩選器模型錯誤摘要。請參閱 renderErrors()。{items}
:列表項目。請參閱 renderItems()。{sorter}
:排序器。請參閱 renderSorter()。{pager}
:分頁器。請參閱 renderPager()。
網格視圖的容器標籤的 HTML 屬性。"tag" 元素指定容器元素的標籤名稱,預設為 "div"。
另請參閱 yii\helpers\Html::renderTagAttributes(),以了解如何呈現屬性的詳細資訊。
表格主體列的 HTML 屬性。這可以是指定所有主體列的通用 HTML 屬性的陣列,或傳回 HTML 屬性陣列的匿名函數。對於 $dataProvider 傳回的每個資料模型,將呼叫一次匿名函數。它應具有以下簽名
function ($model, $key, $index, $grid)
$model
:正在呈現的當前資料模型$key
:與當前資料模型關聯的鍵值$index
:資料模型在 $dataProvider 傳回的模型陣列中的從零開始的索引$grid
:GridView 物件
另請參閱 yii\helpers\Html::renderTagAttributes(),以了解如何呈現屬性的詳細資訊。
網格表格元素的 HTML 屬性。
另請參閱 yii\helpers\Html::renderTagAttributes(),以了解如何呈現屬性的詳細資訊。
方法詳情
定義於: yii\base\Component::__call()
呼叫指定的非類別方法。
此方法將會檢查是否有任何附加的行為具有指定的名稱方法,並且在可用的情況下執行它。
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當調用未知方法時會被隱式呼叫。
public mixed __call ( $name, $params ) | ||
$name | string |
方法名稱 |
$params | array |
方法參數 |
return | mixed |
方法回傳值 |
---|---|---|
throws | yii\base\UnknownMethodException |
當呼叫未知方法時 |
public function __call($name, $params)
{
$this->ensureBehaviors();
foreach ($this->_behaviors as $object) {
if ($object->hasMethod($name)) {
return call_user_func_array([$object, $name], $params);
}
}
throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}
public void __clone ( ) |
public function __clone()
{
$this->_events = [];
$this->_eventWildcards = [];
$this->_behaviors = null;
}
定義於: yii\base\BaseObject::__construct()
建構子。
預設實作會做兩件事
- 使用給定的組態
$config
初始化物件。 - 呼叫 init()。
如果子類別中覆寫了此方法,建議
- 建構子的最後一個參數是一個組態陣列,就像這裡的
$config
一樣。 - 在建構子的結尾呼叫父類別的實作。
public void __construct ( $config = [] ) | ||
$config | array |
將用於初始化物件屬性的名稱-值配對 |
public function __construct($config = [])
{
if (!empty($config)) {
Yii::configure($this, $config);
}
$this->init();
}
定義於: yii\base\Component::__get()
傳回元件屬性的值。
此方法將依以下順序檢查並相應地執行
- getter 定義的屬性:回傳 getter 結果
- 行為的屬性:回傳行為屬性值
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 $value = $component->property;
時會被隱式呼叫。
另請參閱 __set()。
public mixed __get ( $name ) | ||
$name | string |
屬性名稱 |
return | mixed |
屬性值或行為的屬性值 |
---|---|---|
throws | yii\base\UnknownPropertyException |
如果屬性未定義 |
throws | yii\base\InvalidCallException |
如果屬性為唯寫。 |
public function __get($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
// read property, e.g. getName()
return $this->$getter();
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name)) {
return $behavior->$name;
}
}
if (method_exists($this, 'set' . $name)) {
throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}
定義於: yii\base\Component::__isset()
檢查屬性是否已設定,即已定義且非 null。
此方法將依以下順序檢查並相應地執行
- setter 定義的屬性:回傳屬性是否已設定
- 行為的屬性:回傳屬性是否已設定
- 對於不存在的屬性回傳
false
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 isset($component->property)
時會被隱式呼叫。
public boolean __isset ( $name ) | ||
$name | string |
屬性名稱或事件名稱 |
return | boolean |
具名屬性是否已設定 |
---|
public function __isset($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter() !== null;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name)) {
return $behavior->$name !== null;
}
}
return false;
}
定義於: yii\base\Component::__set()
設定元件屬性的值。
此方法將依以下順序檢查並相應地執行
- setter 定義的屬性:設定屬性值
- 格式為 "on xyz" 的事件:將處理常式附加到事件 "xyz"
- 格式為 "as xyz" 的行為:附加名為 "xyz" 的行為
- 行為的屬性:設定行為屬性值
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 $component->property = $value;
時會被隱式呼叫。
另請參閱 __get()。
public void __set ( $name, $value ) | ||
$name | string |
屬性名稱或事件名稱 |
$value | mixed |
屬性值 |
throws | yii\base\UnknownPropertyException |
如果屬性未定義 |
---|---|---|
throws | yii\base\InvalidCallException |
如果屬性為唯讀。 |
public function __set($name, $value)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
// set property
$this->$setter($value);
return;
} elseif (strncmp($name, 'on ', 3) === 0) {
// on event: attach event handler
$this->on(trim(substr($name, 3)), $value);
return;
} elseif (strncmp($name, 'as ', 3) === 0) {
// as behavior: attach behavior
$name = trim(substr($name, 3));
$this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
return;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name)) {
$behavior->$name = $value;
return;
}
}
if (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}
定義於: yii\base\Component::__unset()
將元件屬性設定為 null。
此方法將依以下順序檢查並相應地執行
- setter 定義的屬性:將屬性值設定為 null
- 行為的屬性:將屬性值設定為 null
請勿直接呼叫此方法,因為它是 PHP 的魔術方法,當執行 unset($component->property)
時會被隱式呼叫。
public void __unset ( $name ) | ||
$name | string |
屬性名稱 |
throws | yii\base\InvalidCallException |
如果屬性為唯讀。 |
---|
public function __unset($name)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter(null);
return;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name)) {
$behavior->$name = null;
return;
}
}
throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}
定義於: yii\base\Widget::afterRun()
此方法會在小工具執行後立即調用。
此方法將觸發 EVENT_AFTER_RUN 事件。此方法的回傳值將用作小工具的回傳值。
如果您覆寫此方法,您的程式碼應如下所示
public function afterRun($result)
{
$result = parent::afterRun($result);
// your custom code here
return $result;
}
public mixed afterRun ( $result ) | ||
$result | mixed |
小工具回傳結果。 |
return | mixed |
已處理的小工具結果。 |
---|
public function afterRun($result)
{
$event = new WidgetEvent();
$event->result = $result;
$this->trigger(self::EVENT_AFTER_RUN, $event);
return $event->result;
}
定義於: yii\base\Component::attachBehavior()
將行為附加到此元件。
此方法將根據給定的組態建立行為物件。之後,將透過呼叫 yii\base\Behavior::attach() 方法將行為物件附加到此組件。
另請參閱 detachBehavior()。
public yii\base\Behavior attachBehavior ( $name, $behavior ) | ||
$name | string |
行為的名稱。 |
$behavior | string|array|yii\base\Behavior |
行為組態。可以是以下其中之一
|
return | yii\base\Behavior |
行為物件 |
---|
public function attachBehavior($name, $behavior)
{
$this->ensureBehaviors();
return $this->attachBehaviorInternal($name, $behavior);
}
定義於: yii\base\Component::attachBehaviors()
將行為列表附加到元件。
每個行為都以其名稱索引,並且應該是 yii\base\Behavior 物件、指定行為類別的字串,或是用於建立行為的組態陣列。
另請參閱 attachBehavior()。
public void attachBehaviors ( $behaviors ) | ||
$behaviors | array |
要附加到組件的行為列表 |
public function attachBehaviors($behaviors)
{
$this->ensureBehaviors();
foreach ($behaviors as $name => $behavior) {
$this->attachBehaviorInternal($name, $behavior);
}
}
定義於: yii\base\Widget::beforeRun()
此方法會在小工具執行前立即調用。
此方法將觸發 EVENT_BEFORE_RUN 事件。此方法的回傳值將決定是否應繼續執行小工具。
當覆寫此方法時,請確保您像下面這樣呼叫父類別的實作
public function beforeRun()
{
if (!parent::beforeRun()) {
return false;
}
// your custom code here
return true; // or false to not run the widget
}
public boolean beforeRun ( ) | ||
return | boolean |
是否應繼續執行小工具。 |
---|
public function beforeRun()
{
$event = new WidgetEvent();
$this->trigger(self::EVENT_BEFORE_RUN, $event);
return $event->isValid;
}
開始一個小工具。
此方法建立呼叫類別的實例。它將組態應用於建立的實例。稍後應呼叫相符的 end() 呼叫。由於某些小工具可能會使用輸出緩衝,因此應在同一個視圖中進行 end() 呼叫,以避免破壞輸出緩衝的巢狀結構。
另請參閱 end()。
public static static begin ( $config = [] ) | ||
$config | array |
將用於初始化物件屬性的名稱-值配對 |
return | yii\base\Widget |
新建立的小工具實例 |
---|
public static function begin($config = [])
{
$config['class'] = get_called_class();
/* @var $widget Widget */
$widget = Yii::createObject($config);
self::$stack[] = $widget;
return $widget;
}
定義於: yii\base\Component::behaviors()
傳回此元件應表現為的行為列表。
子類別可以覆寫此方法,以指定它們想要表現為的行為。
此方法的回傳值應該是由行為物件或組態組成的陣列,並以行為名稱索引。行為組態可以是指定行為類別的字串,或是以下結構的陣列
'behaviorName' => [
'class' => 'BehaviorClass',
'property1' => 'value1',
'property2' => 'value2',
]
請注意,行為類別必須從 yii\base\Behavior 擴展。行為可以使用名稱或匿名方式附加。當名稱用作陣列鍵時,使用此名稱,稍後可以使用 getBehavior() 檢索行為,或使用 detachBehavior() 分離行為。匿名行為無法檢索或分離。
在此方法中宣告的行為將會自動附加到組件(依需求)。
public array behaviors ( ) | ||
return | array |
行為組態。 |
---|
public function behaviors()
{
return [];
}
定義於: yii\base\Component::canGetProperty()
傳回一個值,指示是否可以讀取屬性。
如果符合以下條件,則可以讀取屬性
- 類別具有與指定名稱相關聯的 getter 方法(在這種情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數(當
$checkVars
為 true 時); - 附加的行為具有給定名稱的可讀屬性(當
$checkBehaviors
為 true 時)。
另請參閱 canSetProperty()。
public boolean canGetProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
屬性名稱 |
$checkVars | boolean |
是否將成員變數視為屬性 |
$checkBehaviors | boolean |
是否將行為的屬性視為此組件的屬性 |
return | boolean |
屬性是否可以讀取 |
---|
public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name, $checkVars)) {
return true;
}
}
}
return false;
}
定義於: yii\base\Component::canSetProperty()
傳回一個值,指示是否可以設定屬性。
如果符合以下條件,則可以寫入屬性
- 類別具有與指定名稱相關聯的 setter 方法(在這種情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數(當
$checkVars
為 true 時); - 附加的行為具有給定名稱的可寫屬性(當
$checkBehaviors
為 true 時)。
另請參閱 canGetProperty()。
public boolean canSetProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
屬性名稱 |
$checkVars | boolean |
是否將成員變數視為屬性 |
$checkBehaviors | boolean |
是否將行為的屬性視為此組件的屬性 |
return | boolean |
屬性是否可以寫入 |
---|
public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name, $checkVars)) {
return true;
}
}
}
return false;
}
::class
。
定義於: yii\base\BaseObject::className()
傳回此類別的完整限定名稱。
public static string className ( ) | ||
return | string |
此類別的完整限定名稱。 |
---|
public static function className()
{
return get_called_class();
}
根據 "attribute:format:label" 格式的字串建立 yii\grid\DataColumn 物件。
protected yii\grid\DataColumn createDataColumn ( $text ) | ||
$text | string |
資料行規格字串 |
return | yii\grid\DataColumn |
資料行實例 |
---|---|---|
throws | yii\base\InvalidConfigException |
如果資料行規格無效 |
protected function createDataColumn($text)
{
if (!preg_match('/^([^:]+)(:(\w*))?(:(.*))?$/', $text, $matches)) {
throw new InvalidConfigException('The column must be specified in the format of "attribute", "attribute:format" or "attribute:format:label"');
}
return Yii::createObject([
'class' => $this->dataColumnClass ?: DataColumn::className(),
'grid' => $this,
'attribute' => $matches[1],
'format' => isset($matches[3]) ? $matches[3] : 'text',
'label' => isset($matches[5]) ? $matches[5] : null,
]);
}
public yii\base\Behavior|null detachBehavior ( $name ) | ||
$name | string |
行為的名稱。 |
return | yii\base\Behavior|null |
已分離的行為。如果行為不存在,則為 Null。 |
---|
public function detachBehavior($name)
{
$this->ensureBehaviors();
if (isset($this->_behaviors[$name])) {
$behavior = $this->_behaviors[$name];
unset($this->_behaviors[$name]);
$behavior->detach();
return $behavior;
}
return null;
}
定義於: yii\base\Component::detachBehaviors()
從元件分離所有行為。
public void detachBehaviors ( ) |
public function detachBehaviors()
{
$this->ensureBehaviors();
foreach ($this->_behaviors as $name => $behavior) {
$this->detachBehavior($name);
}
}
public static static end ( ) | ||
return | yii\base\Widget |
已結束的小工具實例。 |
---|---|---|
throws | yii\base\InvalidCallException |
public static function end()
{
if (!empty(self::$stack)) {
$widget = array_pop(self::$stack);
$calledClass = get_called_class();
if (Yii::$container->has($calledClass) && isset(Yii::$container->getDefinitions()[$calledClass]['class'])) {
$calledClass = Yii::$container->getDefinitions()[$calledClass]['class'];
}
if (get_class($widget) === $calledClass) {
/* @var $widget Widget */
if ($widget->beforeRun()) {
$result = $widget->run();
$result = $widget->afterRun($result);
echo $result;
}
return $widget;
}
throw new InvalidCallException('Expecting end() of ' . get_class($widget) . ', found ' . get_called_class());
}
throw new InvalidCallException('Unexpected ' . get_called_class() . '::end() call. A matching begin() is not found.');
}
定義於: yii\base\Component::ensureBehaviors()
確保在 behaviors() 中宣告的行為已附加到此元件。
public void ensureBehaviors ( ) |
public function ensureBehaviors()
{
if ($this->_behaviors === null) {
$this->_behaviors = [];
foreach ($this->behaviors() as $name => $behavior) {
$this->attachBehaviorInternal($name, $behavior);
}
}
}
定義於: yii\base\Component::getBehavior()
傳回指定的行為物件。
public yii\base\Behavior|null getBehavior ( $name ) | ||
$name | string |
行為名稱 |
return | yii\base\Behavior|null |
行為物件,如果行為不存在則為 null |
---|
public function getBehavior($name)
{
$this->ensureBehaviors();
return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}
定義於: yii\base\Component::getBehaviors()
傳回附加到此元件的所有行為。
public yii\base\Behavior[] getBehaviors ( ) | ||
return | yii\base\Behavior[] |
附加到此組件的行為列表 |
---|
public function getBehaviors()
{
$this->ensureBehaviors();
return $this->_behaviors;
}
傳回網格視圖 JS 小工具的選項。
protected array getClientOptions ( ) | ||
return | array |
選項 |
---|
protected function getClientOptions()
{
$filterUrl = isset($this->filterUrl) ? $this->filterUrl : Yii::$app->request->url;
$id = $this->filterRowOptions['id'];
$filterSelector = "#$id input, #$id select";
if (isset($this->filterSelector)) {
$filterSelector .= ', ' . $this->filterSelector;
}
return [
'filterUrl' => Url::to($filterUrl),
'filterSelector' => $filterSelector,
];
}
傳回小工具的 ID。
public string|null getId ( $autoGenerate = true ) | ||
$autoGenerate | boolean |
如果先前未設定 ID,是否產生 ID |
return | string|null |
小部件的 ID。 |
---|
public function getId($autoGenerate = true)
{
if ($autoGenerate && $this->_id === null) {
$this->_id = static::$autoIdPrefix . static::$counter++;
}
return $this->_id;
}
定義於: yii\base\Widget::getView()
傳回可用於呈現視圖或視圖檔案的視圖物件。
render() 和 renderFile() 方法將使用此視圖物件來實作實際的視圖渲染。如果未設定,則預設為 "view" 應用程式組件。
public yii\web\View getView ( ) | ||
return | yii\web\View |
可用於呈現視圖或視圖檔案的視圖物件。 |
---|
public function getView()
{
if ($this->_view === null) {
$this->_view = Yii::$app->getView();
}
return $this->_view;
}
public string getViewPath ( ) | ||
return | string |
此小工具的視圖檔案所在目錄。 |
---|
public function getViewPath()
{
$class = new ReflectionClass($this);
return dirname($class->getFileName()) . DIRECTORY_SEPARATOR . 'views';
}
如果未明確指定 $columns,此函數會嘗試從給定的資料猜測要顯示的欄位。
protected void guessColumns ( ) |
protected function guessColumns()
{
$models = $this->dataProvider->getModels();
$model = reset($models);
if (is_array($model) || is_object($model)) {
foreach ($model as $name => $value) {
if ($value === null || is_scalar($value) || is_callable([$value, '__toString'])) {
$this->columns[] = (string) $name;
}
}
}
}
定義於: yii\base\Component::hasEventHandlers()
傳回一個值,指示是否有名稱事件附加任何處理常式。
public boolean hasEventHandlers ( $name ) | ||
$name | string |
事件名稱 |
return | boolean |
是否有任何處理器附加到事件。 |
---|
public function hasEventHandlers($name)
{
$this->ensureBehaviors();
if (!empty($this->_events[$name])) {
return true;
}
foreach ($this->_eventWildcards as $wildcard => $handlers) {
if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
return true;
}
}
return Event::hasHandlers($this, $name);
}
定義於: yii\base\Component::hasMethod()
傳回一個值,指示是否已定義方法。
方法被定義如果
- 類別具有指定名稱的方法
- 附加的行為具有給定名稱的方法 (當
$checkBehaviors
為 true 時)。
public boolean hasMethod ( $name, $checkBehaviors = true ) | ||
$name | string |
屬性名稱 |
$checkBehaviors | boolean |
是否將行為的方法視為此組件的方法 |
return | boolean |
方法是否被定義 |
---|
public function hasMethod($name, $checkBehaviors = true)
{
if (method_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->hasMethod($name)) {
return true;
}
}
}
return false;
}
定義於: yii\base\Component::hasProperty()
傳回一個值,指示是否為此元件定義了屬性。
屬性被定義如果
- 類別具有與指定名稱關聯的 getter 或 setter 方法 (在這種情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數(當
$checkVars
為 true 時); - 附加的行為具有給定名稱的屬性 (當
$checkBehaviors
為 true 時)。
另請參閱
public boolean hasProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
屬性名稱 |
$checkVars | boolean |
是否將成員變數視為屬性 |
$checkBehaviors | boolean |
是否將行為的屬性視為此組件的屬性 |
return | boolean |
屬性是否被定義 |
---|
public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}
初始化網格視圖。
此方法將初始化所需的屬性值並實例化 $columns 物件。
public void init ( ) |
public function init()
{
parent::init();
if ($this->formatter === null) {
$this->formatter = Yii::$app->getFormatter();
} elseif (is_array($this->formatter)) {
$this->formatter = Yii::createObject($this->formatter);
}
if (!$this->formatter instanceof Formatter) {
throw new InvalidConfigException('The "formatter" property must be either a Format object or a configuration array.');
}
if (!isset($this->filterRowOptions['id'])) {
$this->filterRowOptions['id'] = $this->options['id'] . '-filters';
}
$this->initColumns();
}
建立欄位物件並初始化它們。
protected void initColumns ( ) |
protected function initColumns()
{
if (empty($this->columns)) {
$this->guessColumns();
}
foreach ($this->columns as $i => $column) {
if (is_string($column)) {
$column = $this->createDataColumn($column);
} else {
$column = Yii::createObject(array_merge([
'class' => $this->dataColumnClass ?: DataColumn::className(),
'grid' => $this,
], $column));
}
if (!$column->visible) {
unset($this->columns[$i]);
continue;
}
$this->columns[$i] = $column;
}
}
定義於: yii\base\Component::off()
從此元件分離現有的事件處理常式。
此方法與 on() 相反。
注意:如果為事件名稱傳遞了萬用字元模式,則只會移除使用此萬用字元註冊的處理器,而使用符合此萬用字元的純名稱註冊的處理器將會保留。
另請參閱 on()。
public boolean off ( $name, $handler = null ) | ||
$name | string |
事件名稱 |
$handler | callable|null |
要移除的事件處理器。如果為 null,則會移除附加到指定事件的所有處理器。 |
return | boolean |
如果找到並分離處理器 |
---|
public function off($name, $handler = null)
{
$this->ensureBehaviors();
if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
return false;
}
if ($handler === null) {
unset($this->_events[$name], $this->_eventWildcards[$name]);
return true;
}
$removed = false;
// plain event names
if (isset($this->_events[$name])) {
foreach ($this->_events[$name] as $i => $event) {
if ($event[0] === $handler) {
unset($this->_events[$name][$i]);
$removed = true;
}
}
if ($removed) {
$this->_events[$name] = array_values($this->_events[$name]);
return true;
}
}
// wildcard event names
if (isset($this->_eventWildcards[$name])) {
foreach ($this->_eventWildcards[$name] as $i => $event) {
if ($event[0] === $handler) {
unset($this->_eventWildcards[$name][$i]);
$removed = true;
}
}
if ($removed) {
$this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
// remove empty wildcards to save future redundant regex checks:
if (empty($this->_eventWildcards[$name])) {
unset($this->_eventWildcards[$name]);
}
}
}
return $removed;
}
將事件處理常式附加到事件。
事件處理器必須是有效的 PHP 回呼。以下是一些範例
function ($event) { ... } // anonymous function
[$object, 'handleClick'] // $object->handleClick()
['Page', 'handleClick'] // Page::handleClick()
'handleClick' // global function handleClick()
事件處理器必須使用以下簽名定義,
function ($event)
其中 $event
是一個 yii\base\Event 物件,其中包含與事件關聯的參數。
自 2.0.14 版起,您可以將事件名稱指定為萬用字元模式
$component->on('event.group.*', function ($event) {
Yii::trace($event->name . ' is triggered.');
});
另請參閱 off()。
public void on ( $name, $handler, $data = null, $append = true ) | ||
$name | string |
事件名稱 |
$handler | callable |
事件處理器 |
$data | mixed |
事件觸發時要傳遞給事件處理器的資料。當事件處理器被調用時,可以透過 yii\base\Event::$data 存取此資料。 |
$append | boolean |
是否將新的事件處理器附加到現有處理器列表的末尾。如果為 false,則新的處理器將插入到現有處理器列表的開頭。 |
public function on($name, $handler, $data = null, $append = true)
{
$this->ensureBehaviors();
if (strpos($name, '*') !== false) {
if ($append || empty($this->_eventWildcards[$name])) {
$this->_eventWildcards[$name][] = [$handler, $data];
} else {
array_unshift($this->_eventWildcards[$name], [$handler, $data]);
}
return;
}
if ($append || empty($this->_events[$name])) {
$this->_events[$name][] = [$handler, $data];
} else {
array_unshift($this->_events[$name], [$handler, $data]);
}
}
定義於: yii\base\Widget::render()
呈現視圖。
要呈現的視圖可以採用以下格式之一指定
- 路徑別名 (例如 "@app/views/site/index");
- 應用程式內的絕對路徑 (例如 "//site/index"):視圖名稱以雙斜線開頭。實際的視圖檔案將在應用程式的 視圖路徑 下尋找。
- 模組內的絕對路徑 (例如 "/site/index"):視圖名稱以單斜線開頭。實際的視圖檔案將在目前活動模組的 視圖路徑 下尋找。
- 相對路徑 (例如 "index"):實際的視圖檔案將在 $viewPath 下尋找。
如果視圖名稱不包含檔案副檔名,則將使用預設副檔名 .php
。
public string render ( $view, $params = [] ) | ||
$view | string |
視圖名稱。 |
$params | array |
應在視圖中提供的參數 (名稱-值 配對)。 |
return | string |
呈現結果。 |
---|---|---|
throws | yii\base\InvalidArgumentException |
如果視圖檔案不存在。 |
public function render($view, $params = [])
{
return $this->getView()->render($view, $params, $this);
}
呈現標題元素。
public boolean|string renderCaption ( ) | ||
return | boolean|string |
呈現的標題元素,如果應該呈現標題元素,則為 |
---|
public function renderCaption()
{
if (!empty($this->caption)) {
return Html::tag('caption', $this->caption, $this->captionOptions);
}
return false;
}
呈現欄組 HTML。
public boolean|string renderColumnGroup ( ) | ||
return | boolean|string |
欄組 HTML,如果應該呈現欄組,則為 |
---|
public function renderColumnGroup()
{
foreach ($this->columns as $column) {
/* @var $column Column */
if (!empty($column->options)) {
$cols = [];
foreach ($this->columns as $col) {
$cols[] = Html::tag('col', '', $col->options);
}
return Html::tag('colgroup', implode("\n", $cols));
}
}
return false;
}
public string renderEmpty ( ) | ||
return | string |
呈現結果 |
---|
public function renderEmpty()
{
if ($this->emptyText === false) {
return '';
}
$options = $this->emptyTextOptions;
$tag = ArrayHelper::remove($options, 'tag', 'div');
return Html::tag($tag, $this->emptyText, $options);
}
呈現篩選器模型的驗證器錯誤。
public string renderErrors ( ) | ||
return | string |
呈現結果。 |
---|
public function renderErrors()
{
if ($this->filterModel instanceof Model && $this->filterModel->hasErrors()) {
return Html::errorSummary($this->filterModel, $this->filterErrorSummaryOptions);
}
return '';
}
定義於: yii\base\Widget::renderFile()
呈現視圖檔案。
public string renderFile ( $file, $params = [] ) | ||
$file | string |
要呈現的視圖檔案。這可以是檔案路徑或 路徑別名。 |
$params | array |
應在視圖中提供的參數 (名稱-值 配對)。 |
return | string |
呈現結果。 |
---|---|---|
throws | yii\base\InvalidArgumentException |
如果視圖檔案不存在。 |
public function renderFile($file, $params = [])
{
return $this->getView()->renderFile($file, $params, $this);
}
呈現篩選器。
public string renderFilters ( ) | ||
return | string |
呈現結果。 |
---|
public function renderFilters()
{
if ($this->filterModel !== null) {
$cells = [];
foreach ($this->columns as $column) {
/* @var $column Column */
$cells[] = $column->renderFilterCell();
}
return Html::tag('tr', implode('', $cells), $this->filterRowOptions);
}
return '';
}
呈現網格視圖的資料模型。
public string renderItems ( ) | ||
return | string |
表格的 HTML 程式碼 |
---|
public function renderItems()
{
$caption = $this->renderCaption();
$columnGroup = $this->renderColumnGroup();
$tableHeader = $this->showHeader ? $this->renderTableHeader() : false;
$tableBody = $this->renderTableBody();
$tableFooter = false;
$tableFooterAfterBody = false;
if ($this->showFooter) {
if ($this->placeFooterAfterBody) {
$tableFooterAfterBody = $this->renderTableFooter();
} else {
$tableFooter = $this->renderTableFooter();
}
}
$content = array_filter([
$caption,
$columnGroup,
$tableHeader,
$tableFooter,
$tableBody,
$tableFooterAfterBody,
]);
return Html::tag('table', implode("\n", $content), $this->tableOptions);
}
定義於: yii\widgets\BaseListView::renderPager()
呈現分頁器。
public string renderPager ( ) | ||
return | string |
呈現結果 |
---|
public function renderPager()
{
$pagination = $this->dataProvider->getPagination();
if ($pagination === false || $this->dataProvider->getCount() <= 0) {
return '';
}
/* @var $class LinkPager */
$pager = $this->pager;
$class = ArrayHelper::remove($pager, 'class', LinkPager::className());
$pager['pagination'] = $pagination;
$pager['view'] = $this->getView();
return $class::widget($pager);
}
呈現指定名稱的區段。
如果命名的 section 不被支援,將會回傳 false。
public string|boolean renderSection ( $name ) | ||
$name | string |
section 名稱,例如 |
return | string|boolean |
section 的呈現結果,如果命名的 section 不被支援,則為 false。 |
---|
public function renderSection($name)
{
switch ($name) {
case '{errors}':
return $this->renderErrors();
default:
return parent::renderSection($name);
}
}
定義於: yii\widgets\BaseListView::renderSorter()
呈現排序器。
public string renderSorter ( ) | ||
return | string |
呈現結果 |
---|
public function renderSorter()
{
$sort = $this->dataProvider->getSort();
if ($sort === false || empty($sort->attributes) || $this->dataProvider->getCount() <= 0) {
return '';
}
/* @var $class LinkSorter */
$sorter = $this->sorter;
$class = ArrayHelper::remove($sorter, 'class', LinkSorter::className());
$sorter['sort'] = $sort;
$sorter['view'] = $this->getView();
return $class::widget($sorter);
}
定義於: yii\widgets\BaseListView::renderSummary()
呈現摘要文字。
public void renderSummary ( ) |
public function renderSummary()
{
$count = $this->dataProvider->getCount();
if ($count <= 0) {
return '';
}
$summaryOptions = $this->summaryOptions;
$tag = ArrayHelper::remove($summaryOptions, 'tag', 'div');
if (($pagination = $this->dataProvider->getPagination()) !== false) {
$totalCount = $this->dataProvider->getTotalCount();
$begin = $pagination->getPage() * $pagination->pageSize + 1;
$end = $begin + $count - 1;
if ($begin > $end) {
$begin = $end;
}
$page = $pagination->getPage() + 1;
$pageCount = $pagination->pageCount;
if (($summaryContent = $this->summary) === null) {
return Html::tag($tag, Yii::t('yii', 'Showing <b>{begin, number}-{end, number}</b> of <b>{totalCount, number}</b> {totalCount, plural, one{item} other{items}}.', [
'begin' => $begin,
'end' => $end,
'count' => $count,
'totalCount' => $totalCount,
'page' => $page,
'pageCount' => $pageCount,
]), $summaryOptions);
}
} else {
$begin = $page = $pageCount = 1;
$end = $totalCount = $count;
if (($summaryContent = $this->summary) === null) {
return Html::tag($tag, Yii::t('yii', 'Total <b>{count, number}</b> {count, plural, one{item} other{items}}.', [
'begin' => $begin,
'end' => $end,
'count' => $count,
'totalCount' => $totalCount,
'page' => $page,
'pageCount' => $pageCount,
]), $summaryOptions);
}
}
if ($summaryContent === '') {
return '';
}
return Html::tag($tag, Yii::$app->getI18n()->format($summaryContent, [
'begin' => $begin,
'end' => $end,
'count' => $count,
'totalCount' => $totalCount,
'page' => $page,
'pageCount' => $pageCount,
], Yii::$app->language), $summaryOptions);
}
呈現表格主體。
public string renderTableBody ( ) | ||
return | string |
呈現結果。 |
---|
public function renderTableBody()
{
$models = array_values($this->dataProvider->getModels());
$keys = $this->dataProvider->getKeys();
$rows = [];
foreach ($models as $index => $model) {
$key = $keys[$index];
if ($this->beforeRow !== null) {
$row = call_user_func($this->beforeRow, $model, $key, $index, $this);
if (!empty($row)) {
$rows[] = $row;
}
}
$rows[] = $this->renderTableRow($model, $key, $index);
if ($this->afterRow !== null) {
$row = call_user_func($this->afterRow, $model, $key, $index, $this);
if (!empty($row)) {
$rows[] = $row;
}
}
}
if (empty($rows) && $this->emptyText !== false) {
$colspan = count($this->columns);
return "<tbody>\n<tr><td colspan=\"$colspan\">" . $this->renderEmpty() . "</td></tr>\n</tbody>";
}
return "<tbody>\n" . implode("\n", $rows) . "\n</tbody>";
}
呈現表格標頭。
public string renderTableHeader ( ) | ||
return | string |
呈現結果。 |
---|
public function renderTableHeader()
{
$cells = [];
foreach ($this->columns as $column) {
/* @var $column Column */
$cells[] = $column->renderHeaderCell();
}
$content = Html::tag('tr', implode('', $cells), $this->headerRowOptions);
if ($this->filterPosition === self::FILTER_POS_HEADER) {
$content = $this->renderFilters() . $content;
} elseif ($this->filterPosition === self::FILTER_POS_BODY) {
$content .= $this->renderFilters();
}
return "<thead>\n" . $content . "\n</thead>";
}
使用給定的資料模型和鍵呈現表格列。
public string renderTableRow ( $model, $key, $index ) | ||
$model | mixed |
要呈現的資料模型 |
$key | mixed |
與資料模型關聯的索引鍵 |
$index | integer |
資料模型在 $dataProvider 回傳的模型陣列中的從零開始的索引。 |
return | string |
呈現結果 |
---|
public function renderTableRow($model, $key, $index)
{
$cells = [];
/* @var $column Column */
foreach ($this->columns as $column) {
$cells[] = $column->renderDataCell($model, $key, $index);
}
if ($this->rowOptions instanceof Closure) {
$options = call_user_func($this->rowOptions, $model, $key, $index, $this);
} else {
$options = $this->rowOptions;
}
$options['data-key'] = is_array($key) ? json_encode($key) : (string) $key;
return Html::tag('tr', implode('', $cells), $options);
}
執行小工具。
public void run ( ) |
public function run()
{
$view = $this->getView();
GridViewAsset::register($view);
$id = $this->options['id'];
$options = Json::htmlEncode(array_merge($this->getClientOptions(), ['filterOnFocusOut' => $this->filterOnFocusOut]));
$view->registerJs("jQuery('#$id').yiiGridView($options);");
parent::run();
}
設定小工具的 ID。
public void setId ( $value ) | ||
$value | string |
Widget 的 ID。 |
public function setId($value)
{
$this->_id = $value;
}
定義於: yii\base\Widget::setView()
設定此小工具要使用的視圖物件。
public void setView ( $view ) | ||
$view | yii\base\View |
可用於呈現視圖或視圖檔案的視圖物件。 |
public function setView($view)
{
$this->_view = $view;
}
public void trigger ( $name, yii\base\Event $event = null ) | ||
$name | string |
事件名稱 |
$event | yii\base\Event|null |
事件實例。如果未設定,將會建立預設的 yii\base\Event 物件。 |
public function trigger($name, Event $event = null)
{
$this->ensureBehaviors();
$eventHandlers = [];
foreach ($this->_eventWildcards as $wildcard => $handlers) {
if (StringHelper::matchWildcard($wildcard, $name)) {
$eventHandlers[] = $handlers;
}
}
if (!empty($this->_events[$name])) {
$eventHandlers[] = $this->_events[$name];
}
if (!empty($eventHandlers)) {
$eventHandlers = call_user_func_array('array_merge', $eventHandlers);
if ($event === null) {
$event = new Event();
}
if ($event->sender === null) {
$event->sender = $this;
}
$event->handled = false;
$event->name = $name;
foreach ($eventHandlers as $handler) {
$event->data = $handler[1];
call_user_func($handler[0], $event);
// stop further handling if the event is handled
if ($event->handled) {
return;
}
}
}
// invoke class-level attached handlers
Event::trigger($this, $name, $event);
}
public static string widget ( $config = [] ) | ||
$config | array |
將用於初始化物件屬性的名稱-值配對 |
return | string |
Widget 的呈現結果。 |
---|---|---|
throws | Throwable |
public static function widget($config = [])
{
ob_start();
ob_implicit_flush(false);
try {
/* @var $widget Widget */
$config['class'] = get_called_class();
$widget = Yii::createObject($config);
$out = '';
if ($widget->beforeRun()) {
$result = $widget->run();
$out = $widget->afterRun($result);
}
} catch (\Exception $e) {
// close the output buffer opened above if it has not been closed already
if (ob_get_level() > 0) {
ob_end_clean();
}
throw $e;
} catch (\Throwable $e) {
// close the output buffer opened above if it has not been closed already
if (ob_get_level() > 0) {
ob_end_clean();
}
throw $e;
}
return ob_get_clean() . $out;
}
註冊 或 登入 以進行評論。